package com.sxbbc.common.core.service;


import com.sxbbc.common.core.dto.jz.FreezeDTO;
import com.sxbbc.common.core.dto.jz.FreezeVo;

import java.math.BigDecimal;

/**
 * 账户变动操作 业务层接口
 * @author xiaoky
 * @date 2019-06-02
 */
@SuppressWarnings("all")
public interface IAccountChangeService {

	/** 账户关闭开始时间的秒数 */
	public static final long ACCOUNT_CLOSE_START = 0;
			
	/** 账户关闭结束时间的秒数 */
	public static final long ACCOUNT_CLOSE_END = 1800;
	
	/** 账户关闭期间文本提示 */
	public static final String ACCOUNT_CLOSE_REMARK = "系统结算期间【00:00至00:30】，暂停此功能";

	/**
	 * 检查该时间是否可以操作账户
	 * @return true 可以操作 false不能操作
	 * @author Wahyee
	 */
	public boolean checkHandleAccount();

	//region 资金表基础操作

	/**
	 * 操作用户余额
	 * @param cid
	 * @param typeId 操作类型
	 * @param isOut 支出收入  0 支出  1 收入
	 * @param payCode 
	 * @param cost 操作金额
	 * @param remark 备注
	 * @param targetId 触发人id
	 * @return 操作成功返回空字符,操作失败返回失败提示
	 */
	String insertCMoneyDetail(Integer cid, Integer typeId, Integer isOut, String payCode, BigDecimal cost,
			String remark, Integer targetId);

	/**
	 * 操作用户积分
	 * @param cid
	 * @param typeId 操作类型
	 * @param isOut  支出收入  0 支出  1 收入
	 * @param payCode
	 * @param cost 操作积分
	 * @param remark 备注
	 * @param targetId 触发人id
	 * @return 操作成功返回空字符,操作失败返回失败提示
	 */
	String insertCPointDetail(Integer cid, Integer typeId, Integer isOut, String payCode, BigDecimal cost,
			String remark, Integer targetId);

	/**
	 * 操作店铺余额
	 * @param bid
	 * @param typeId 操作类型
	 * @param isOut 支出收入  0 支出  1 收入
	 * @param payCode 
	 * @param cost 操作金额
	 * @param remark 备注
	 * @param targetId 触发人id
	 * @return 操作成功返回空字符,操作失败返回失败提示
	 */
	String insertBMoneyDetail(Integer bid, Integer typeId, Integer isout, String payCode, BigDecimal cost,
			String remark, Integer targetId);

	/**
	 * 操作代理余额
	 * @param bid
	 * @param typeId 操作类型
	 * @param isOut 支出收入  0 支出  1 收入
	 * @param payCode
	 * @param cost 操作金额
	 * @param remark 备注
	 * @param targetId 触发人id
	 * @return 操作成功返回空字符,操作失败返回失败提示
	 */
	String insertAgMoneyDetail(Integer agid, Integer typeId, Integer isout, String payCode, BigDecimal cost,
			String remark, Integer targetId);

	//endregion

	/**
	 * 处理商家或用户冻结金额返还(订单发生退款)
	 * @param freezeVo 冻结业务vo类
	 * @author xiaoky
	 * @return java.lang.String
	 */
	String handleFreezeReturn(FreezeVo freezeVo);

    /**
     * 处理用户冻结金额
     * @param dto
     * @return
     * @author Wahyee
     */
    String handleFreezeCustomerMoney(FreezeDTO dto);
    
    /**
     * 处理用户冻结积分
     * @param dto
     * @return
     * @author Wahyee
     */
    String handleFreezeCustomerPoint(FreezeDTO dto);

    /**
     * 处理商家冻结金额
     * @param dto
     * @return
     * @author Wahyee
     */
    String handleFreezeBusinessMoney(FreezeDTO dto);

	/**
	 * 处理代理冻结金额
	 * @param dto
	 * @return
	 */
	String handleFreezeAgentMoney(FreezeDTO dto);

}
